package br.com.sistema.dao;

import javax.faces.context.FacesContext;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import javax.servlet.http.HttpSession;

import br.com.sistema.entidade.Usuario;

public class UsuarioDAOImplements extends GenericDAOImplements<Usuario>
		implements UsuarioDAO {

	private static final long serialVersionUID = 1L;
	private HttpSession session;

	public UsuarioDAOImplements() {
		super(Usuario.class);
	}

	public boolean login(String login, String senha) {
		try {
			abrirTransacao();
			Query query = em
					.createQuery("Select u from Usuario u where nome = :login and senha = :senha");
			query.setParameter("login", login);
			query.setParameter("senha", senha);
			Usuario usuario = (Usuario) query.getSingleResult();
			if ((usuario.getNome().equalsIgnoreCase(login))
					&& (usuario.getSenha().equalsIgnoreCase(senha)) == true) {
				criarSessao(usuario);
				return true;
			}
		} catch (NoResultException e) {
			return false;
		} finally {
			fecharTransacao();
		}
		return false;
	}

	public void logoff() {
		this.session.invalidate();
	}

	public Usuario recuperarUsuarioDaSessao() {
		Usuario usuario = (Usuario) this.session.getAttribute("usuario");
		return usuario;
	}

	private void criarSessao(Usuario usuario) {
		FacesContext context = FacesContext.getCurrentInstance();
		this.session = (HttpSession) context.getExternalContext().getSession(
				false);
		this.session.setAttribute("usuario", usuario);
	}
}
